M
MLOG
۲۲ شهریور ۱۴۰۴فارسی

با هوک experimental_useFormStatus ری‌اکت برای نظارت بی‌درنگ فرم‌ها آشنا شوید که تجربه کاربری را بهبود بخشیده و بازخورد فوری ارائه می‌دهد. پیاده‌سازی و بهترین روش‌ها را بیاموزید.

موتور بی‌درنگ React experimental_useFormStatus: نظارت زنده بر فرم‌ها

وب مدرن نیازمند رابط‌های کاربری واکنش‌گرا و بصری است. فرم‌ها به عنوان جزء اصلی برنامه‌های وب، نیاز به توجه دقیق به تجربه کاربری (UX) دارند. هوک experimental_useFormStatus ری‌اکت مکانیزم قدرتمندی را برای ارائه بازخورد بی‌درنگ در طول ارسال فرم ارائه می‌دهد که تجربه کاربری را به طور قابل توجهی بهبود می‌بخشد. این مقاله به بررسی قابلیت‌های این API آزمایشی، موارد استفاده، جزئیات پیاده‌سازی و بهترین روش‌ها برای ایجاد فرم‌های جذاب و آموزنده برای مخاطبان جهانی می‌پردازد.

experimental_useFormStatus چیست؟

experimental_useFormStatus یک هوک ری‌اکت است که برای ارائه اطلاعاتی در مورد وضعیت ارسال فرمی طراحی شده است که توسط یک کامپوننت سرور ری‌اکت آغاز شده است. این هوک بخشی از کاوش‌های در حال انجام ری‌اکت در زمینه اکشن‌های سرور (Server Actions) است که به توسعه‌دهندگان اجازه می‌دهد منطق سمت سرور را مستقیماً از کامپوننت‌های ری‌اکت اجرا کنند. این هوک اساساً یک نمای سمت کلاینت از وضعیت پردازش فرم سرور را فراهم می‌کند و توسعه‌دهندگان را قادر می‌سازد تا تجربه‌های فرم بسیار تعاملی و واکنش‌گرا بسازند.

قبل از experimental_useFormStatus، ارائه به‌روزرسانی‌های بی‌درنگ در مورد ارسال فرم اغلب شامل مدیریت وضعیت پیچیده، عملیات ناهمزمان و مدیریت دستی وضعیت‌های بارگذاری و خطا بود. این هوک این فرآیند را ساده می‌کند و روشی اعلانی و مختصر برای دسترسی به وضعیت ارسال فرم ارائه می‌دهد.

مزایای کلیدی استفاده از experimental_useFormStatus

  • تجربه کاربری بهبود یافته: بازخورد فوری در مورد روند ارسال فرم‌ها به کاربران ارائه می‌دهد که عدم قطعیت را کاهش داده و رضایت کلی را بهبود می‌بخشد.
  • مدیریت خطای بی‌درنگ: به توسعه‌دهندگان اجازه می‌دهد پیام‌های خطای خاصی را درون فیلدهای فرم نمایش دهند، که تصحیح ورودی‌ها را برای کاربران آسان‌تر می‌کند.
  • مدیریت وضعیت ساده‌تر: نیاز به مدیریت دستی وضعیت مربوط به وضعیت ارسال فرم را از بین می‌برد و پیچیدگی کد را کاهش می‌دهد.
  • دسترسی‌پذیری تقویت‌شده: توسعه‌دهندگان را قادر می‌سازد تا به‌روزرسانی‌های بی‌درنگ در مورد وضعیت فرم را به فناوری‌های کمکی ارائه دهند و دسترسی‌پذیری را برای کاربران دارای معلولیت بهبود بخشد.
  • بهبود تدریجی: فرم‌ها حتی در صورت غیرفعال بودن یا عدم بارگذاری جاوااسکریپت به کار خود ادامه می‌دهند و سطح پایه از عملکرد را تضمین می‌کنند.

experimental_useFormStatus چگونه کار می‌کند؟

این هوک یک شی با خصوصیات زیر برمی‌گرداند:

  • pending: یک مقدار بولی (Boolean) که نشان می‌دهد آیا ارسال فرم در حال حاضر در دست اجراست یا خیر.
  • data: داده‌های بازگردانده شده توسط اکشن سرور پس از ارسال موفقیت‌آمیز فرم. این می‌تواند شامل پیام‌های تأیید، داده‌های به‌روز شده یا هر اطلاعات مرتبط دیگری باشد.
  • error: یک شی خطا که حاوی جزئیات هر خطایی است که در طول ارسال فرم رخ داده است.
  • action: تابع اکشن سرور که هنگام ارسال فرم فراخوانی شده است. این به شما امکان می‌دهد عناصر رابط کاربری مختلف را بر اساس اکشن خاصی که در حال انجام است، به صورت شرطی رندر کنید.

مثال‌های عملی و پیاده‌سازی

بیایید یک مثال ساده از فرم تماس را در نظر بگیریم که از experimental_useFormStatus استفاده می‌کند:

مثال 1: فرم تماس ساده

ابتدا، یک Server Action برای مدیریت ارسال فرم تعریف کنید (در یک فایل جداگانه قرار داده شود، مثلاً `actions.js`):


\"use server\";

import { revalidatePath } from 'next/cache';

export async function submitContactForm(prevState: any, formData: FormData) {
  const name = formData.get('name');
  const email = formData.get('email');
  const message = formData.get('message');

  if (!name || !email || !message) {
    return {
      message: 'Please fill in all fields.',
    };
  }

  // Simulate a database operation or API call
  await new Promise((resolve) => setTimeout(resolve, 2000));

  try {
    // In a real application, you would send the data to your backend
    console.log('Form data submitted:', { name, email, message });
    // Simulate success
    revalidatePath('/'); // Optional: revalidate the root route if needed
    return { message: 'Thank you for your message!' };

  } catch (error: any) {
    console.error('Error submitting form:', error);
    return { message: 'Failed to submit the form. Please try again later.' };
  }
}

اکنون، کامپوننت فرم را با استفاده از experimental_useFormStatus پیاده‌سازی کنید:


'use client';

import { experimental_useFormStatus as useFormStatus } from 'react-dom';
import { submitContactForm } from './actions';

function ContactForm() {
  const { pending, data, error } = useFormStatus();

  return (